#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    int pipefd[2]; // 存储管道的两个文件描述符
    pid_t cpid;    // 用于存储子进程ID
    char buf[100]; // 用于从管道读取数据的缓冲区

    // 创建管道
    if (pipe(pipefd) == -1) {
        perror("pipe");
        exit(EXIT_FAILURE);
    }

    // 创建子进程
    cpid = fork();
    if (cpid == -1) {
        perror("fork");
        exit(EXIT_FAILURE);
    }

    if (cpid == 0) {    // 子进程中
        close(pipefd[1]); // 关闭管道的写端

        // 从管道中读取数据
        ssize_t n = read(pipefd[0], buf, sizeof(buf));
        if (n == -1) {
            perror("read");
            exit(EXIT_FAILURE);
        }

        // 打印读取的数据
        printf("%s\n", buf);

        close(pipefd[0]); // 关闭管道的读端
        _exit(EXIT_SUCCESS);
    } else { // 父进程中
        close(pipefd[0]); // 关闭管道的读端

        const char *msg = "20221420漆心雨"; // 替换为你的学号和姓名
        // 向管道中写入数据
        write(pipefd[1], msg, strlen(msg)+1); // +1 以包含字符串末尾的 '\0'

        close(pipefd[1]); // 关闭管道的写端
        wait(NULL);       // 等待子进程结束
    }

    return 0;
}
